/* eslint valid-jsdoc: "off" */

'use strict';

/**
 * @param {Egg.EggAppInfo} appInfo app info
 */
module.exports = appInfo => {
  /**
   * built-in config
   * @type {Egg.EggAppConfig}
   **/
  const config = exports = {};

  // use for cookie sign key, should change to your own and keep security
  config.keys = appInfo.name + '_1643770669942_8106';

  // add your middleware config here
  config.middleware = [ 'errorHandler', 'auth', 'isAdmin' ];
  // 只对 /api 前缀的 url 路径生效
  config.errorHandler = {
    match: '/api',
  };
  // 不需要验证token的路由
  config.routerAuth = [ '/api/admin/user/login', '/api/admin/user/register', '/api/news/pc-web/user/WeChatLogin' ];
  // 不需要验证管理员的路由
  config.routerAdmin = [ '/api/admin/user/login', '/api/admin/user/register', '/api/admin/user/', '/api/admin/cart', '/api/admin/cart/selectAll', '/api/news/pc-web/user/WeChatLogin' ];
  // 上传文件存放的全局地址
  config.uploadDir = 'app/public/upload';
  // 上传文件的配置
  // https://github.com/eggjs/egg-multipart
  config.multipart = {
    // 支持后台上传文件功能
    whitelist: [ '.png', '.jpg', '.jpeg', '.gif', '.bmp', '.rar', '.zip', '.mp3', '.wmv', '.doc', '.xls', '.mp4' ],
    // 文件允许大小
    fileSize: '50mb',
    // 上传字段的数量
    fields: '50',
    // mode: 'stream',
    // fileModeMatch: /(\/pageTemplate)$/, // /pageTemplate接口使用file模式，其他使用stream模式
    // mode: 'file',
  };
  // add your user config here
  const userConfig = {
    // myAppName: 'egg',
  };

  exports.customLoader = {
    validate: {
      directory: 'app/validate',
    },
  };
  // 修改启动端口
  config.cluster = {
    listen: {
      path: '',
      port: 8001,
      hostname: '0.0.0.0',
    },
  };
  // github授权登录请求参数
  config.github = {
    // 客户ID
    client_id: '88f028142403410abfef',
    // 客户密匙
    client_secret: 'da3a092cff011e072f052d65ed1c407d6d83434b',
    // 获取 access_token
    access_token_url: 'https://github.com/login/oauth/access_token',
    // 获取用户信息
    user_info_url: 'https://api.github.com/user',
    redirect_uri: 'http://127.0.0.1:8888/dashboard',
  };
  // 微信配置
  config.wechat = {
    AppID: 'wxd4a837c38b866355', // 应用唯一标识
    AppSecret: 'b4482ef8bf52de9467d288130ed5c9f6', // 应用密钥AppSecret
    token: 'Maya', // token
    user_info_url: 'https://api.weixin.qq.com/sns/userinfo', // 获取用户信息
    openid: 'o406o6Kra-kSm4tpNrVmA1ZcYsUc', // 普通用户的标识，对当前开发者帐号唯一
  };
  // qq邮箱
  config.qqEmail = {
    host: 'smtp.qq.com',						// QQ邮箱的SMTP地址
    port: 465,									// 每个邮箱的端口号可能是一样的，一般都使用465，但有些公司使用的就不是465
    auth: {
      user: '877880098@qq.com', 		// 你自己的邮箱的邮箱地址
      pass: 'lelsutwwhhjvbbhg', // 上面我们提到的授权码
    },
  };

  // 阿里sms短信配置
  config.aliSms = {
    accessKeyId: 'LTAI5tLyAnqSedBdhZ2GLZdB', // 用于标识用户。
    accessKeySecret: 'w6dV7gEkSClfdGvFOdF7cgwrKrGMGe', // 用于验证用户的密钥。AccessKey Secret必须保密。
    // securityToken: '<your-sts-token>', // use STS Token
    endpoint: 'https://dysmsapi.aliyuncs.com',
    apiVersion: '2017-05-25',
  };

  // 跨域设置
  config.security = {
    csrf: {
      enable: false,
      ignoreJSON: true,
    },
    domainWhiteList: [ 'http://localhost:8888' ], // 配置白名单 不再有跨域问题
  };

  config.cors = {
    origin: '*', // 允许所有跨域访问，注释掉则允许上面 白名单 访问
    allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH',
    // *一般性最好使用白名单，不要使用全部允许跨域，不安全
  };

  config.sequelize = {
    dialect: 'mysql', // 表示使用mysql
    host: '127.0.0.1', // 连接的数据库主机地址
    port: 3306, // mysql服务端口
    database: 'api-egg', // 数据库名
    username: 'root', // 数据库用户名
    password: 'admin123', // 数据库密码
    define: { // model的全局配置
      timestamps: true, // 添加create,update,delete时间戳
      paranoid: true, // 添加软删除
      freezeTableName: true, // 防止修改表名为复数
      underscored: false, // 防止驼峰式字段被默认转为下划线
    },
    timezone: '+8:00', // 由于orm用的UTC时间，这里必须加上东八区，否则取出来的时间相差8小时
    dialectOptions: { // 让读取date类型数据时返回字符串而不是UTC时间
      dateStrings: true,
      typeCast(field, next) {
        if (field.type === 'DATETIME') {
          return field.string();
        }
        return next();
      },
    },
  };

  config.jwt = {
    secret: 'www.i6i8.cn',
    secret_refresh: 'www.i6i8.cn-refresh',
    expiresIn: { expiresIn: '72h' }, // token过期时间
    enable: true, // default is false
    match: /^\/my/, // optional
  };

  config.bcrypt = {
    saltRounds: 10, // default 10
  };


  return {
    ...config,
    ...userConfig,
  };
};
